home *** CD-ROM | disk | FTP | other *** search
- /*
- *****************************************************************
- * --- VisualSort V1.01 (C) 1994 by Nico Max --- *
- * *
- * This program is public domain. This means that you can copy *
- * it for free or rewrite the source for your purposes as long *
- * as you give with your program a note about the origial *
- * aothor. *
- * *
- * the author can be reached at: Nico Max *
- * Gerüstbauerring 15 *
- * 18109 Rostock *
- * Germany *
- * or email to: sanity@informatik.uni-rostock.de *
- * *
- * VisualSort was written using... *
- * *
- * Wouter van Oortmerssen's Amiga_EV2.1b (I love it!) *
- *****************************************************************
- */
-
- MODULE 'intuition/screens','intuition/intuition','intuition/gadgetclass',
- 'graphics/displayinfo','graphics/text','graphics/rastport',
- 'gadtools','libraries/gadtools',
- 'reqtools','libraries/reqtools',
- 'devices/inputevent','keymap'
-
- OPT OSVERSION=37
-
- CONST COLSET=2,COLCLEAR=0
-
- ENUM NOWB,NOSCR,NOWIN,NOID,NOVISUAL,NOCONTXT,NOGAD,NOMENUS,SCHLEIF
- ENUM ARG_AS,ARG_DES,ARG_DEGREE,NUMARGS
- ENUM ABOUT,QUIT,BUBBLE,SHAKE,INSERT,SEL,SHELL,MERGE,QUICK,HEAP,SCREEN,BREAK,STOPS
-
- RAISE NOWB IF OpenWorkBench()=0,
- NOID IF GetVPModeID()=INVALID_ID,
- NOSCR IF OpenScreenTagList()=0,
- NOWIN IF OpenWindowTagList()=0,
- NOVISUAL IF GetVisualInfoA()=0,
- NOCONTXT IF CreateContext()=0,
- NOGAD IF CreateGadgetA()=0,
- NOMENUS IF CreateMenusA()=0,
- NOMENUS IF LayoutMenusA()=0
-
- DEF scr=0:PTR TO screen,win=0:PTR TO window,visual=0,menus,
- glist=0:PTR TO gadget,
- scroller:PTR TO gadget, bstop:PTR TO gadget,bexit:PTR TO gadget,
- infoy,infox,inforecty,
- reqfail=FALSE,
- screenmodereq:PTR TO rtscreenmoderequester,
- adr=0:PTR TO INT,maxlen,
- rectop,recleft,recwidth,
- font=0,textheight,
- args[NUMARGS]:LIST,shortcuts:PTR TO LONG,sorties:PTR TO LONG
-
- PROC main() HANDLE
- DEF x:PTR TO LONG,templ,rdargs
- shortcuts:= ['?','Q','B','A','I','C','L','M','K','H','S','E','O']
- sorties:= [BUBBLE,SHAKE,INSERT,SEL,SHELL,MERGE,QUICK,HEAP]
- FOR x:=0 TO NUMARGS-1 DO args[x]:=0
- templ:='A=ASCENDING/S,D=DESCENDING/S,DEGREE/N'; rdargs:=ReadArgs(templ,args,NIL)
- IF (args[ARG_AS]<>0) AND (args[ARG_DES]<>0)
- WriteF('decide what you want\n'); Raise(SCHLEIF); ENDIF
- IF ((x:=Long(args[ARG_DEGREE]))<0) OR (x>100)
- WriteF('0 <= degree <= 100\n'); Raise(SCHLEIF); ENDIF
- IF ((args[ARG_AS]=0) AND (args[ARG_DES]=0)) AND args[ARG_DEGREE]
- WriteF('choose ascending/descending\n'); Raise(SCHLEIF); ENDIF
- IF ((args[ARG_AS] OR args[ARG_DES]) AND (args[ARG_DEGREE]=0))
- WriteF('choose a degree\n'); Raise(SCHLEIF); ENDIF
- openlibs(); opengui(0,'Welcome to VisualSort V1.0')
- wait4message(); closegui(); closelibs(); IF rdargs THEN FreeArgs(rdargs)
- EXCEPT
- x:= ['open workbench screen','open screen','open window','get ModeID',
- 'get visualinfo','get context','create gadget','create menus']
- IF exception <> SCHLEIF THEN printerrmsg('Couldn\at \s!',[x[exception]])
- closegui(); closelibs(); IF rdargs THEN FreeArgs(rdargs)
- ENDPROC
-
- PROC wait4message()
- DEF mes:PTR TO intuimessage,class,code,iadr,qual,what,funcs:PTR TO LONG
- LOOP
- IF mes:=Gt_GetIMsg(win.userport)
- class:=mes.class; code :=mes.code; iadr :=mes.iaddress; qual:= mes.qualifier
- Gt_ReplyIMsg(mes); what:= getwhat(iadr,class,code,qual)
- SELECT what
- CASE ABOUT
- printerrmsg(' --- VisualSort 1.01 ---\n'+
- ' (C) Copyright 1994 by Nico Max\n\n'+
- 'for remarks or if you find bugs (or for sending donations :-))\n'+
- 'please write to: Nico Max\n'+
- ' Gerüstbauerring 15\n'+
- ' 18109 Rostock\n'+
- ' Germany\n'+
- ' or email: sanity@informatik.uni-rostock.de\n\n'+
- ' Written using Wouter van Oortmerssen\as Amiga_EV2.1b\n'+
- ' GUI created using GadToolsBoxV2.0c (C) Jaba Development',0)
- CASE QUIT; RETURN
- CASE SCREEN
- IF (reqtoolsbase=0) OR (screenmodereq=0)
- PrintFault('No reqtools.library available!',0)
- ELSE
- IF RtScreenModeRequestA(screenmodereq,'Choose screenmode...',
- [RT_WINDOW,win,
- RT_REQPOS,REQPOS_CENTERWIN,0])
- closegui(); opengui(screenmodereq.displayid,'nice screenmode :-)')
- ENDIF
- ENDIF
- DEFAULT
- IF (what >= BUBBLE) AND (what <= HEAP)
- OnGadget(bexit,win,0); OnGadget(bstop,win,0); createarray()
- IF adr
- clearinfo(); ClearMenuStrip(win)
- funcs:= [`bubble(0,maxlen,adr),`shake (0,maxlen,adr),
- `insert(0,maxlen,adr),`selsort(0,maxlen,adr),
- `shell (0,maxlen,adr),`merge (0,maxlen,adr),
- `quick (0,maxlen,adr),`heap (1,maxlen,adr)]
- Eval(funcs[what-BUBBLE]); ResetMenuStrip(win,menus); DisplayBeep(0)
- ELSE
- printerrmsg('Not enough memory!\nYou should use a lower resolution',0)
- ENDIF
- OffGadget(bexit,win,0); OffGadget(bstop,win,0)
- ENDIF
- ENDSELECT
- ELSE; WaitPort(win.userport); ENDIF
- ENDLOOP
- ENDPROC
-
- PROC checkbreak()
- DEF mes:PTR TO intuimessage,iadr,class,code,qual,weiter=FALSE,what
- IF mes:=Gt_GetIMsg(win.userport)
- iadr :=mes.iaddress; class:= mes.class; code:= mes.code; qual:= mes.qualifier
- Gt_ReplyIMsg(mes); what:= getwhat(iadr,class,code,qual)
- SELECT what
- CASE STOPS
- clearinfo(); displayinfo(' *** stopped',0)
- REPEAT
- IF mes:=Gt_GetIMsg(win.userport)
- iadr :=mes.iaddress; class:= mes.class; code:= mes.code; qual:= mes.qualifier
- Gt_ReplyIMsg(mes); what:= getwhat(iadr,class,code,qual)
- IF what=STOPS THEN weiter:= TRUE
- IF what=BREAK
- what:= RemoveGadget(win,bstop)
- bstop.flags:= bstop.flags AND Not(GFLG_SELECTED);
- AddGadget(win,bstop,what); RefreshGList(bstop,win,0,1)
- clearinfo(); displayinfo(' Brekkies',0); Raise(BREAK); ENDIF
- ELSE; WaitPort(win.userport); ENDIF
- UNTIL weiter; clearinfo()
- CASE BREAK
- clearinfo(); displayinfo(' Brekkies',0); Raise(BREAK)
- ENDSELECT
- ENDIF
- ENDPROC
-
- PROC getwhat(iadr,class,code,qual)
- DEF inputrec:inputevent,buffer[10]:STRING,x,titel,item
- inputrec.class:= IECLASS_RAWKEY; inputrec.code:= code; inputrec.qualifier:= qual
- IF class=IDCMP_RAWKEY
- MapRawKey(inputrec,buffer,10,0)
- IF inputrec.qualifier AND IEQUALIFIER_RCOMMAND
- UpperStr(buffer); x:= buffer[]
- SELECT x
- CASE Char(shortcuts[ABOUT]); RETURN ABOUT
- CASE Char(shortcuts[QUIT]); RETURN QUIT
- CASE Char(shortcuts[BUBBLE]); RETURN BUBBLE
- CASE Char(shortcuts[SHAKE]); RETURN SHAKE
- CASE Char(shortcuts[INSERT]); RETURN INSERT
- CASE Char(shortcuts[SEL]); RETURN SEL
- CASE Char(shortcuts[SHELL]); RETURN SHELL
- CASE Char(shortcuts[MERGE]); RETURN MERGE
- CASE Char(shortcuts[QUICK]); RETURN QUICK
- CASE Char(shortcuts[HEAP]); RETURN HEAP
- CASE Char(shortcuts[SCREEN]); RETURN SCREEN
- CASE Char(shortcuts[BREAK])
- IF bexit.flags AND GFLG_DISABLED THEN RETURN -1
- x:= RemoveGadget(win,bexit); bexit.flags:= bexit.flags+GFLG_SELECTED
- AddGadget(win,bexit,x); RefreshGList(bexit,win,0,1)
- Delay(4); x:= RemoveGadget(win,bexit)
- bexit.flags:= bexit.flags-GFLG_SELECTED; AddGadget(win,bexit,x)
- RefreshGList(bexit,win,0,1); RETURN BREAK
- CASE Char(shortcuts[STOPS])
- IF bexit.flags AND GFLG_DISABLED THEN RETURN -1
- x:= RemoveGadget(win,bstop); bstop.flags:= Eor(bstop.flags,GFLG_SELECTED);
- AddGadget(win,bstop,x); RefreshGList(bstop,win,0,1); RETURN STOPS
- ENDSELECT
- ENDIF
- ELSE
- IF iadr=bstop THEN RETURN STOPS
- IF iadr=bexit THEN RETURN BREAK; ENDIF
- IF (class=IDCMP_MENUPICK) AND (code<>$ffff)
- titel:=code AND %11111; item:= Shr(code,5) AND %111111
- SELECT titel
- CASE 0; IF item=0 THEN RETURN ABOUT; IF item=2 THEN RETURN QUIT
- CASE 1; RETURN sorties[item]
- CASE 2; RETURN SCREEN
- ENDSELECT
- ENDIF
- ENDPROC -1
-
- /*-----------------------------------------------------------------------------*/
- PROC bubble(von,bis,adr:PTR TO INT) HANDLE
- DEF fertig, pos,loop=1
- REPEAT
- fertig:= TRUE; displayinfo('\d[5]th loop ',[loop++])
- FOR pos:= von TO bis-1
- IF adr[pos] > adr[pos+1]
- swapentries (adr,pos,pos+1); fertig:=FALSE
- ENDIF
- ENDFOR
- checkbreak()
- UNTIL fertig
- EXCEPT
- ENDPROC
- /*-----------------------------------------------------------------------------*/
- PROC shake (von,bis,adr:PTR TO INT) HANDLE
- DEF links, rechts, i, position,loop=1
- position:= links:= von; rechts:= bis - 1
- WHILE links <= rechts
- displayinfo('\d[5] left, \d[5] right, \d[5]th loop ',[links,rechts,loop++])
- FOR i := links TO rechts
- checkbreak()
- IF adr[i] > adr[i+1] THEN swapentries (adr,i,position:=i+1)
- ENDFOR
- rechts := position - 1
- FOR i:= rechts TO links STEP -1
- checkbreak()
- IF adr[i] > adr[i+1] THEN swapentries (adr,position:=i,i+1)
- ENDFOR
- links := position + 1
- ENDWHILE
- EXCEPT
- ENDPROC
- /*-----------------------------------------------------------------------------*/
- PROC insert(von,bis,adr:PTR TO INT) HANDLE
- DEF j,i
- FOR i:= von+1 TO bis
- checkbreak()
- FOR j:= i TO 2 STEP -1 DO IF adr[j-1] > adr [j] THEN swapentries (adr,j-1,j)
- displayinfo('\d[5]th element at right position',{i})
- ENDFOR
- EXCEPT
- ENDPROC
- /*-----------------------------------------------------------------------------*/
- PROC selsort(von,bis,adr:PTR TO INT) HANDLE
- DEF min,x,y
- FOR y:= von TO bis-1
- min:=y; checkbreak()
- FOR x:=y+1 TO bis
- IF adr[x] < adr[min] THEN min:=x
- ENDFOR
- swapentries (adr,y,min); displayinfo('\d[5]th element at right position ',[y])
- ENDFOR
- EXCEPT
- ENDPROC
- /*-----------------------------------------------------------------------------*/
- PROC shell(von,bis,adr:PTR TO INT) HANDLE
- DEF i,j,incr
- incr:= Shr(bis,1)
- WHILE incr>von
- FOR i:= incr+1 TO bis
- j:= i-incr
- WHILE j>0
- checkbreak()
- IF adr[j] > adr[j+incr]
- swapentries (adr,j,j+incr); j:= j-incr
- ELSE; j:= 0; ENDIF
- ENDWHILE
- ENDFOR
- incr:= Shr(incr,1)
- ENDWHILE
- EXCEPT
- ENDPROC
- /*-----------------------------------------------------------------------------*/
- PROC merge (von,bis,adr:PTR TO INT) HANDLE
- DEF hilf:PTR TO INT
- hilf:= New(Shl(bis-von+2,1))
- IF hilf; sort1 (adr, von, bis, hilf); Dispose(hilf)
- ELSE; printerrmsg('Not enough memory!\nChoose a lower screenmode!',0); ENDIF
- EXCEPT
- ENDPROC
-
- PROC mergesort1 (inp:PTR TO INT,von1, bis1,von2,bis2,out:PTR TO INT)
- DEF i1, i2, j
- j:= i1 := von1; i2 := von2; checkbreak()
- WHILE (i1 <= bis1) AND (i2 <= bis2)
- checkbreak()
- IF inp[i1] <= inp[i2]
- setpoint(i1,inp[i1],COLCLEAR); setpoint(j,inp[i1],COLSET)
- out[j++] := inp[i1++]
- ELSE
- setpoint(i2,inp[i2],COLCLEAR); setpoint(j,inp[i2],COLSET)
- out[j++] := inp[i2++]
- ENDIF
- ENDWHILE
- WHILE i1 <= bis1
- checkbreak()
- setpoint(i1,inp[i1],COLCLEAR); setpoint(j,inp[i1],COLSET)
- out[j++] := inp[i1++]
- ENDWHILE
- WHILE i2 <= bis2
- checkbreak()
- setpoint(i2,inp[i2],COLCLEAR); setpoint(j,inp[i2],COLSET)
- out[j++] := inp[i2++]
- ENDWHILE
- ENDPROC
-
- PROC sort1 (unsort_vekt:PTR TO INT,von,bis,hilf:PTR TO INT)
- DEF split, x1, x2,i
- IF (bis-von) > 0
- split := Shr((bis-von),1); x1 := von + split; x2 := x1 + 1
- sort2 (unsort_vekt, von, x1, hilf)
- sort2 (unsort_vekt, x2, bis, hilf)
- mergesort1 (unsort_vekt, von, x1, x2, bis, hilf)
- FOR i:= von TO bis
- checkbreak(); unsort_vekt[i]:= hilf[i]
- ENDFOR
- ELSE; hilf[von] := unsort_vekt[von]; ENDIF
- ENDPROC
-
- PROC sort2 (unsort_vekt:PTR TO INT,von, bis,hilf:PTR TO INT)
- DEF split, x1, x2
- IF (bis-von) > 0
- split := Shr((bis-von),1); x1 := von + split; x2 := x1 + 1
- sort1 (unsort_vekt, von, x1, hilf)
- sort1 (unsort_vekt, x2, bis, hilf)
- mergesort1 (hilf, von, x1, x2, bis, unsort_vekt)
- ENDIF
- ENDPROC
- /*-----------------------------------------------------------------------------*/
- PROC quick(von,bis,adr:PTR TO INT) HANDLE
- qsort(von,bis,adr)
- EXCEPT
- ENDPROC
-
- PROC qsort(l, r, a:PTR TO INT)
- DEF i, j, x
- i := l; j := r; x := a[Shr((l+r),1)]
- REPEAT
- checkbreak()
- WHILE a[i++] < x; ENDWHILE
- WHILE x < a[j] DO DEC j
- IF i-- <= j; swapentries(a,i++,j); DEC j; ENDIF
- UNTIL i > j
- IF l < j THEN qsort(l, j,a)
- IF i < r THEN qsort(i, r,a)
- ENDPROC
- /*-----------------------------------------------------------------------------*/
- PROC heap(von,bis,adr:PTR TO INT) HANDLE
- DEF i,x
- x:= Shr(bis,1)
- FOR i:= x TO von STEP -1
- checkbreak(); reheap (i,bis,adr)
- ENDFOR
- FOR i:= bis TO von+1 STEP -1
- checkbreak(); swapentries (adr,von,i); reheap (von,i-1,adr)
- ENDFOR
- EXCEPT
- ENDPROC
-
- PROC reheap (i,k,adr:PTR TO INT)
- DEF j,son,x
- j:= i
- LOOP
- checkbreak()
- IF (x:=Shl(j,1)) > k THEN RETURN
- IF (x+1) <= k
- IF adr[x] >= adr[x+1] THEN son:= x ELSE son:= x+1
- ELSE; son:= x; ENDIF
- IF adr[j] <= adr[son]
- swapentries (adr,j,son); j:= son
- ELSE; RETURN; ENDIF
- ENDLOOP
- ENDPROC
- /*-----------------------------------------------------------------------------*/
-
- PROC swapentries(adr:PTR TO INT,i,j)
- DEF x
- setpoint(i,adr[i],COLCLEAR); setpoint(j,adr[j],COLCLEAR)
- setpoint(i,adr[j],COLSET); setpoint(j,adr[i],COLSET)
- x:= adr[i]; adr[i]:= adr[j]; adr[j]:=x
- ENDPROC
-
- PROC createarray()
- DEF x,anstieg,rndadr:PTR TO INT,y,a,b,rndptr,temp
- IF adr THEN Dispose(adr); adr:= New(Shl(maxlen+1,1))
- IF adr
- displayinfo('Creating sorting area...',0)
- SetAPen(win.rport,0); RectFill(win.rport,recleft-1,rectop-1,maxlen+1,recwidth+rectop+1)
- IF args[ARG_DEGREE]
- anstieg:= SpDiv(SpFlt(maxlen),SpFlt(recwidth))
- IF args[ARG_DES]
- FOR x:= 0 TO maxlen
- adr[x]:= SpFix(SpMul(SpFlt(maxlen+1-x),anstieg)); setpoint(x,adr[x],1)
- ENDFOR
- ELSE
- FOR x:= 0 TO maxlen
- adr[x]:= SpFix(SpMul(SpFlt(x),anstieg)); setpoint(x,adr[x],1)
- ENDFOR
- ENDIF
- rndadr:= New(Shl(maxlen+1,1))
- IF rndadr
- x:= Long(args[ARG_DEGREE])
- y:= SpFix(SpMul(SpDiv(100.0,SpFlt(-maxlen)),SpFlt(x)))+maxlen
- FOR x:=0 TO maxlen DO rndadr[x]:= 65535
- IF y<>1
- FOR x:=0 TO y
- rndptr:= a:= Rnd(maxlen)+1; b:= Rnd(maxlen)+1
- WHILE (rndadr[rndptr] <> 65535) AND (rndadr[rndptr] = a)
- INC rndptr; IF rndptr > maxlen THEN rndptr:= 0
- ENDWHILE
- rndadr[rndptr]:= a; a:= rndptr; rndptr:= b;
- WHILE (rndadr[rndptr] <> 65535) AND (rndadr[rndptr] = b)
- INC rndptr; IF rndptr > maxlen THEN rndptr:= 0;
- ENDWHILE
- rndadr[rndptr]:= b; b:= rndptr
- setpoint(a,adr[a],COLCLEAR); setpoint(b,adr[b],COLCLEAR)
- temp:= adr[a]; adr[a]:= adr[b]; adr[b]:= temp
- setpoint(a,adr[a],1); setpoint(b,adr[b],1)
- ENDFOR
- ENDIF
- Dispose(rndadr)
- ELSE
- printerrmsg('Not enough memory!\nChoose a lower resolution!\n',0)
- SetAPen(win.rport,0); RectFill(win.rport,recleft,rectop,maxlen,recwidth+rectop)
- FOR x:=0 TO maxlen
- adr[x]:= Rnd(recwidth); setpoint(x,adr[x],1)
- ENDFOR
- ENDIF
- ELSE
- FOR x:=0 TO maxlen
- adr[x]:= Rnd(recwidth); setpoint(x,adr[x],1)
- ENDFOR
- ENDIF
- ENDIF
- ENDPROC
-
- PROC clearinfo()
- SetAPen(win.rport,0); RectFill(win.rport,2,inforecty,scr.width-2,inforecty+textheight+1)
- ENDPROC
-
- PROC displayinfo(body,text)
- DEF x,ziel[40]:STRING
- SetAPen(win.rport,1); LEA.L putproc(PC),A0; MOVE.L A0,x
- RawDoFmt(body,text,x,ziel); TextF(infox,infoy,ziel)
- ENDPROC
-
- putproc: MOVE.B D0,(A3)+; RTS
-
- PROC setpoint(x,y,c); Plot(recleft+x,rectop+recwidth-y,c); ENDPROC
-
- PROC opengui(modeid,welcome)
- DEF wbscr=0:PTR TO screen,x,offy,delta,
- twidth, icht:PTR TO tf,ichr:PTR TO rastport
- IF modeid=0
- IF wbscr:= OpenWorkBench()
- modeid:= GetVPModeID(wbscr.viewport); font:= wbscr.font; ENDIF
- ENDIF
- scr:=OpenScreenTagList(0,
- [SA_TITLE, 'VisualSortV1.01 ©1994 by Nico Max',
- SA_PENS, [$ffff]:INT,
- SA_FONT, font,
- SA_FULLPALETTE,TRUE,
- SA_DEPTH, 2,
- SA_DISPLAYID, modeid,
- SA_TYPE, CUSTOMSCREEN,0])
- visual:=GetVisualInfoA(scr,NIL)
- LayoutMenusA(menus:=CreateMenusA([1,0,'Project',0,$0,0,0,
- 2,0,'About...',shortcuts[ABOUT],$0,0,0,
- 2,0,-1,0,$0,0,0,
- 2,0,'Quit', shortcuts[QUIT],$0,0,0,
- 1,0,'Algorithms',0,$0,0,0,
- 2,0,'BubbleSort',shortcuts[BUBBLE],$0,0,0,
- 2,0,'ShakeSort', shortcuts[SHAKE],$0,0,0,
- 2,0,'InsertSort',shortcuts[INSERT],$0,0,0,
- 2,0,'SelectSort',shortcuts[SEL],$0,0,0,
- 2,0,'ShellSort', shortcuts[SHELL],$0,0,0,
- 2,0,'MergeSort', shortcuts[MERGE],$0,0,0,
- 2,0,'QuickSort', shortcuts[QUICK],$0,0,0,
- 2,0,'HeapSort', shortcuts[HEAP],$0,0,0,
- 1,0,'Setup',0,$0,0,0,
- 2,0,IF reqfail THEN 'sorry, no reqtools' ELSE 'Screenmode...',shortcuts[SCREEN],$0,0,0,
- 0,0,0,0,0,0,0]:newmenu,NIL),visual,[$80080043,1,0])
- delta:= twidth:= TextLength(ichr:= scr.rastport,' Stop ',STRLEN)
- icht:= ichr.font; textheight:= icht.ysize; offy:= scr.height-(textheight+6)
- bstop:= CreateGadgetA(BUTTON_KIND,CreateContext({glist}),
- [scr.width-twidth,offy,twidth,textheight+6,' St_op ',NIL,0,16,visual,0]:newgadget,
- [GA_DISABLED,TRUE,GT_UNDERSCORE,"_",0])
- bstop.activation:= bstop.activation OR GACT_TOGGLESELECT
- twidth:= TextLength(ichr,' Break ',STRLEN); delta:= delta+twidth
- bexit:=CreateGadgetA(BUTTON_KIND,bstop,
- [scr.width-delta,offy,twidth,textheight+6,' Br_eak ',NIL,1,16,visual,0]:newgadget,
- [GA_DISABLED,TRUE,GT_UNDERSCORE,"_",0])
- scroller:=CreateGadgetA(SCROLLER_KIND,bexit,
- [0,offy,scr.width-delta,textheight+6,0,NIL,2,0,visual,0]:newgadget,
- [GA_RELVERIFY,1,
- GTSC_TOTAL,128,
- GTSC_VISIBLE,1,
- GA_DISABLED,1,NIL])
- win:=OpenWindowTagList(0,
- [WA_FLAGS, WFLG_ACTIVATE+WFLG_SMART_REFRESH+WFLG_BACKDROP+
- WFLG_BORDERLESS+$200000,
- WA_IDCMP, IDCMP_RAWKEY+IDCMP_GADGETDOWN+
- IDCMP_GADGETUP+IDCMP_MENUPICK,
- WA_CUSTOMSCREEN,scr,
- WA_GADGETS, glist,0])
- DrawBevelBoxA(stdrast:=win.rport,
- 0,inforecty:= offy:=offy-(textheight+6),scr.width,textheight+6,
- [GT_VISUALINFO,visual,NIL]); INC inforecty
- infox:= 5; infoy:= offy+icht.baseline+3; offy:= offy-scr.barheight-1
- DrawBevelBoxA(win.rport,0,x:=scr.barheight+1,scr.width,offy,
- [GT_VISUALINFO,visual,NIL])
- displayinfo(welcome,0)
- rectop:= x+2; recleft:=3; recwidth:= offy-5; maxlen:= scr.width-6
- SetMenuStrip(win,menus); Gt_RefreshWindow(win,NIL)
- ENDPROC
-
- PROC openlibs()
- IF (gadtoolsbase:=OpenLibrary('gadtools.library',37))=0
- printerrmsg('Need gadtools.library!',0); Raise(SCHLEIF)
- ENDIF
- IF (reqtoolsbase:=OpenLibrary('reqtools.library',38))=0
- printerrmsg('No reqtools.library found!\nYou\are not able to change screenmode',0)
- reqfail:= TRUE
- ELSE
- IF (screenmodereq:=RtAllocRequestA(RT_SCREENMODEREQ,0))=0
- printerrmsg('Couldn\at allocate Screenrequesterstructure!',0)
- reqfail:= TRUE
- ENDIF
- ENDIF
- IF (keymapbase:= OpenLibrary('keymap.library',0))=0
- printerrmsg('Need keymap.library!',0); Raise(SCHLEIF); ENDIF
- ENDPROC
-
- PROC closelibs()
- IF keymapbase THEN CloseLibrary(keymapbase)
- IF screenmodereq THEN RtFreeRequest(screenmodereq)
- IF reqtoolsbase THEN CloseLibrary(reqtoolsbase)
- IF gadtoolsbase THEN CloseLibrary(gadtoolsbase)
- ENDPROC
-
- PROC closegui()
- IF visual THEN FreeVisualInfo(visual)
- IF win THEN CloseWindow(win)
- IF scr THEN CloseScreen(scr)
- IF adr; Dispose(adr); adr:=0; ENDIF
- ENDPROC
-
- PROC printerrmsg(string,bodyfmt)
- EasyRequestArgs(win,[20,0,0,string,' Ok ']:easystruct,0,bodyfmt)
- ENDPROC
-
- CHAR '$VER: VisualSort 1.01 (3.13.94)'
-